package cookie_test;

import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Create By IntelliJ IDEA
 *
 * @Author: jsonor
 * @Create-Time: 2017/10/9 16:08
 * @Description: 最后登录的Servlet
 */
@WebServlet(name = "last", urlPatterns = {"/last"})
public class LastServlet extends HttpServlet {

  // 用户登录的时间的Cookie的名字
  private static final String COOKIE_TIME_NAME = "t";

  @Override
  protected void doGet(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException {

    // 判断用户请求中的日期Cookie是否存在
    String time = getCookie(request.getCookies(), COOKIE_TIME_NAME);

    // 无论cookie是否存在，都需要更新
    Date date = new Date();
    Cookie ck = new Cookie(COOKIE_TIME_NAME, Long.toString(date.getTime()));
    response.addCookie(ck);

    response.addHeader("content-type", "text/html;charset=utf-8");
    if (time == null) {
      // 如果不存在
      response.getWriter().println("你是第一次登录，当前时间为 " + date.toString());
    } else {
      // 如果Cookie已经存在，则将请求中的Cookie值写给用户
      response.getWriter().println("你上次登录的时间是 " + new Date(Long.parseLong(time)));
    }
  }

  /**
   * 通过用户指定的名字搜寻对应的Cookie，并返回对应的值，如果为找到，则返回null
   *
   * @param cookies 被搜寻的Cookie集合
   * @param cookieName 要查找的Cookie的名字
   * @return Cookie对应的值
   */
  private String getCookie(Cookie[] cookies, String cookieName) {
    // 没Cookie
    if (cookies == null) {
      return null;
    }

    // 搜索对应的Cookie
    for (Cookie ck : cookies) {
      if (ck.getName().equals(cookieName)) {
        return ck.getValue();
      }
    }

    // 没找到
    return null;
  }
}
